Mobile phone functionality has evolved tremendously over the last several years. Initially, there was just voice transmission. Then, short messages and web browsing were added. Later, interactions with vending machines and multimedia messaging became available. Most recently, video conferencing, Internet access, and interaction with the surrounding physical environment became possible. The evolution of mobile phones and wireless-enabled handheld devices, as well as the increasing proliferation of wireless networks, is changing users' traditional understanding of computers. The notion of desktop computing is slowly evolving into a more dynamic model. Mobile phones are capable of connecting to wireless networks and have enough processing power to perform tasks previously reserved for servers and workstations. As such, mobile phones became users' digital companions that operate in the context of individual users and assist them with everyday tasks. Furthermore, increasing speed of wireless transmissions enable the development of applications that allow mobile phones to interact with distributed services (e.g., Web Services) and access and share rich multimedia contents.
The increasing relevance of software services demands more sophisticated operation systems for mobile phone devices. These operation systems provide support for application development based on languages such as Java (MIDLET 2.0, DoJa, Personal Java), C#, C, and C++. Furthermore, these operations systems provide support for middleware services that assist in the development of distributed applications. The increasing mobile phone sophistication implies increasing device configuration complexity, higher probability of software errors, and the requirement to enhance existing software at runtime. For example, a mobile phone may be equipped with a digital camera, support transmission of pictures (known as MMS), and support Internet connectivity, which allows browsing Web and WAP pages, downloading and sending e-mail, and accessing services running on the Internet. However, before using these services a user must configure his or her terminal. This configuration task typically is a tedious and error prone process that involves calling the customer support center and following a number of instructions, including entering parameters such as host names, IP addresses, user names, and passwords.
In addition, as software platforms become larger, so does the probability of software errors. According to recent studies, 10 percent of mobile phones are returned due to software problems. With over 1200 million subscribers worldwide, it means that over 120 million phones are returned every year. That is, 120 million users have to take their device to a customer support center to update their phones. This is very costly for carriers and frustrating for mobile phone users.
Further, software vendors periodically provide new functionality for existing mobile software. For example, an existing mail client may provide support for additional attachments, or a web browser may provide additional functionality to manipulate scripts. Again, requesting mobile phone users to take their phone to a customer support center for software update is inconvenient for the users.
There are solutions that address some of these problems. For example, some existing products provide functionality to update the mobile phone's firmware at runtime. They do it by comparing the image of the existing firmware with the image of the new firmware, calculating the binary differences between the two images, and updating the image of the existing image with the calculated differences. However, this approach requires user intervention to implement the update, can only replace the entire software image (rather than certain logic or structural properties), and can only perform the update when the system is stopped.
An exemplary technique for replacing processes at runtime is described in the U.S. Pat. No. 4,954,941. This technique involves registering processes with a signaling mechanism. When the signaling mechanism generates a signal, a relevant process can replace itself with an updated binary image. However, the technique described in the U.S. Pat. No. 4,954,941 does not allow for replacement of individual fragments of processes, may result in corruption of data being processed, and cannot support dynamic software composition. In addition, the abovementioned technique lacks a mechanism for managing the state, structure and logic of a software application.
The U.S. Pat. No. 5,155,847 describes an exemplary technique for replacing software that resides on a collection of client devices. The software is updated using a central host that stores the updates and generates patches for different client devices. A client agent connects to the host, retrieves the latest patches and installs these patches on relevant client devices. However, the technique described in the U.S. Pat. No. 5,155,847 requires that an affected application be stopped during the update process. In addition, this technique cannot support remote state configuration, dynamic software composition, and inspection and modification of the structure and logic of the system.
The U.S. Pat. No. 5,359,730 describes a technique for replacing operating system (OS) components at runtime. The OS components are replaced using hardware traps that redirect the invocation of OS components to corresponding modules. However, the technique described in the U.S. Pat. No. 5,359,730 is platform dependent, and lacks the capability of supporting dynamic software composition and inspection of the system at runtime.
The U.S. Pat. No. 5,732,275 describes a technique for updating software residing on a client device. This technique relies on modifying the application launcher to cause the latest application version to be downloaded and installed before the execution of the application. The major limitation of the technique described in the U.S. Pat. No. 5,732,275 is that the software can only be updated at launch time, and not while the software is running.